package com.tool.xmltool.entry;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;


/**
 * 报文通用结构
 * 解包对象
 *
 * @author zhoubin
 * @date 2022-05-20
 */
@Slf4j
@Data
public class XmlMessage {

    /**
     * 错误码
     */
    private String errCode;

    /**
     * 错误信息
     */
    private String errMessage;

    /**
     * 如果有签名值的话会将前面的信息保存到map中，key为 signature_value
     *
     * xml body解析后的map
     * map的key为对应的业务语义，value为对应节点的值。
     * 碰到循环域时，value为list类型。循环域中内容以map的形式存在list中, 多个循环域占list的多个值
     *
     * map<key, value>
     *    <key, list[map<key, value>]>
     *                  <key, list[map<key, value>]>
     *              [map<key, value>]
     *                  <key, list[map<key, value>]>
     *
     */
    private Map<String, Object> bodyMap;

    public static XmlMessage of() {

        XmlMessage xmlMessage = new XmlMessage();
        xmlMessage.setErrCode("00");
        xmlMessage.setErrMessage("成功");

        return xmlMessage;
    }

    /**
     * 成功时返回
     * @param bodyMap 报文体
     * @return
     */
    public static XmlMessage of(Map<String, Object> bodyMap) {

        XmlMessage xmlMessage = new XmlMessage();
        xmlMessage.setErrCode("00");
        xmlMessage.setErrMessage("成功");
        xmlMessage.setBodyMap(bodyMap);

        return xmlMessage;
    }

    /**
     * 错误时调用
     * @param errMsg 错误信息
     * @param bodyMap 报文体map
     * @return
     */
    public static XmlMessage errMsg(String errMsg, Map<String, Object> bodyMap) {

        XmlMessage xmlMessage = new XmlMessage();
        xmlMessage.setErrCode("09");
        xmlMessage.setErrMessage(errMsg);
        xmlMessage.setBodyMap(bodyMap);

        return xmlMessage;
    }

    /**
     * 错误时调用
     * @param errMsg
     * @return
     */
    public void errMsg(String errMsg) {

        this.errCode = "09";
        this.errMessage = errMsg;
    }
}
